package DataBaseTest;

import com.auqaoasis.model.DataBase;
import com.auqaoasis.model.field.FieldType;
import com.auqaoasis.model.table.Table;
import com.auqaoasis.model.table.tableFile.HeapTableFile;
import com.auqaoasis.model.table.TableDesc;
import org.junit.Test;

import java.io.File;
import java.util.Arrays;
import java.util.List;
import java.util.Map;

/**
 * @Author Auqaoasis
 * @Date 2022/3/30 - 13:43
 * @Description: 数据库操作测试
 */
public class DataBaseTest1 {
    String path = "D:\\代码文件\\面试项目\\simple-db\\src\\test\\java\\DiskTest\\disk_test.txt";
    /**
     * 建表流程即为
     * 1.创建数据库
     * 2.创建表磁盘文件
     * 3.创建表结构
     * 4.创建新表（表名，表磁盘文件，表结构）
     * 5.数据库新建表
     */
    @Test
    public void InsertTable() {
        /**
         * 第一步：创建数据库
         */
        DataBase dataBase = new DataBase();

        /**
         * 第二步：创建表磁盘文件
         */
        //读取文件
        File file = new File(path);
        //创建表文件对象
        HeapTableFile heapTableFile = new HeapTableFile(file);

        /**
         * 第三步：创建表结构
         */
        //新建表中的属性和属性类型
        TableDesc.Attribute att1 = new TableDesc.Attribute("f1", FieldType.INT);
        TableDesc.Attribute att2 = new TableDesc.Attribute("f2", FieldType.LONG);
        List<TableDesc.Attribute> attributes = Arrays.asList(att1, att2);

        //新建表结构对象
        TableDesc tableDesc = new TableDesc(attributes);

        /**
         * 第四步：创建新表（表名，表磁盘文件，表结构）
         */
        //新建表
        Table table1 = new Table("test1", heapTableFile, tableDesc);
        Table table2 = new Table("test2", heapTableFile, tableDesc);

        /**
         * 第五步：数据库新建表
         */
        //数据库新增表(磁盘文件，表名，表结构（即表中的属性）)
        dataBase.addTable(table1);
        dataBase.addTable(table2);


        /**
         * 查看数据库所有表和表的属性
         */
        for (Map.Entry<String, Table> tableEntry : dataBase.getTablesByName().entrySet()) {
            System.out.println("表名为" + tableEntry.getKey());
            Table selectedTable = tableEntry.getValue();
            System.out.println(tableEntry.getKey() + "表内属性和属性值为:");
            for (TableDesc.Attribute i : selectedTable.getTableDesc().getAttributes()) {
                System.out.println(i.getFiledName() + "\t" + i.getFieldType());
            }
            System.out.println();
        }

    }


}
